﻿using System;
using System.ComponentModel;

namespace EnumsNET.Test
{
	public enum StringFilterOperator
	{
		[StringFilterOperatorType(StringFilterOperatorType.OneValue)]
		Is = 0,
		[StringFilterOperatorType(StringFilterOperatorType.OneValue)]
		IsNot,
		[StringFilterOperatorType(StringFilterOperatorType.OneValue)]
		IsExact,
		[StringFilterOperatorType(StringFilterOperatorType.OneValue)]
		IsNotExact,
		[StringFilterOperatorType(StringFilterOperatorType.OneValue)]
		StartsWith,
		[StringFilterOperatorType(StringFilterOperatorType.OneValue)]
		[Description("Doesn't Start With")]
		DoesntStartWith,
		[StringFilterOperatorType(StringFilterOperatorType.OneValue)]
		Contains,
		[StringFilterOperatorType(StringFilterOperatorType.OneValue)]
		[Description("Doesn't Contain")]
		DoesntContain,
		[StringFilterOperatorType(StringFilterOperatorType.MultipleValues)]
		IsAny,
		[StringFilterOperatorType(StringFilterOperatorType.MultipleValues)]
		IsNotAny,
		[StringFilterOperatorType(StringFilterOperatorType.MultipleValues)]
		IsExactAny,
		[StringFilterOperatorType(StringFilterOperatorType.MultipleValues)]
		IsNotExactAny,
		[StringFilterOperatorType(StringFilterOperatorType.MultipleValues)]
		StartsWithAny,
		[StringFilterOperatorType(StringFilterOperatorType.MultipleValues)]
		[Description("Doesn't Start With Any")]
		DoesntStartWithAny,
		[StringFilterOperatorType(StringFilterOperatorType.MultipleValues)]
		ContainsAny,
		[StringFilterOperatorType(StringFilterOperatorType.MultipleValues)]
		[Description("Doesn't Contain Any")]
		DoesntContainAny
	}

	public enum StringFilterOperatorType
	{
		OneValue = 0,
		MultipleValues
	}

	[AttributeUsage(AttributeTargets.Field)]
	public class StringFilterOperatorTypeAttribute : Attribute
	{
		public StringFilterOperatorType Type { get; }

        public StringFilterOperatorTypeAttribute(StringFilterOperatorType type)
		{
			Type = type;
		}
	}
}
